前一篇文章中我们了解到了make rk3399_defconfig
的原理,在 uboot 根目录会生成 .config
文件。
然后我们执行 make
命令,下面是他的流程:
Makefile 中默认执行 make all
1 | 815 all: $(ALL-y) |
ALL-y
需要生成四个目标文件
1 | 757 # Always append ALL so that arch config.mk's can add custom ones |
目标文件1 u-boot.srec
1 | 844 u-boot.hex u-boot.srec: u-boot FORCE |
目标文件2 u-boot.bin
1 | 863 u-boot.bin: u-boot FORCE |
目标文件3 System.map
1 | 1280 System.map: u-boot |
目标文件4 binary_size_check
1 | 849 binary_size_check: u-boot.bin FORCE |
所以可以看到,他们首先都需要 u-boot 这个 elf 文件。
1 | 1128 u-boot: $(u-boot-init) $(u-boot-main) u-boot.lds |
进一步分析 u-boot 依赖于三个参数 u-boot-init
u-boot-main
u-boot.lds
第一个参数 u-boot-init
定义为
1 | 701 u-boot-init := $(head-y) |
第二个参数 u-boot-main
定义为
1 | 702 u-boot-main := $(libs-y) |
值得注意的是,其中的 VENDOR、CPU、SOC、DIR、ARCH 宏是定义在 config.mk 。
第三个参数 u-boot.lds 定义为
1 | 1245 u-boot.lds: $(LDSCRIPT) prepare FORCE |
1 | 546 # If there is no specified link script, we look in a number of places for it |
对于上面三个 lds,优先级从前到后依次增加。
prepare
定义: